/*
 * NodoABB.cpp
 *
 *  Created on: 14/10/2011
 *      Author: diego
 */

#include "NodoABB.h"

NodoABB::NodoABB(string* termino, int doc_id){
	this->termino = termino;
	this->frec_t = 1;
	this->hijoDer = NULL;
	this->hijoIzq = NULL;
	this->cant_documentos = 1;
	this->lista = new Lista<reg_docs_variable*>();

	reg_docs_variable* nodo = new reg_docs_variable;
	nodo->doc_id = doc_id;
	nodo->frec = 1;

	this->ultimo_nodo_lista = nodo;
	this->lista->agregar(nodo);
	return;
}

NodoABB* NodoABB::getHijoIzq(){
	return this->hijoIzq;
}

NodoABB* NodoABB::getHijoDer(){
	return this->hijoDer;
}

void NodoABB::setHijoDer(NodoABB* nodo){
	this->hijoDer = nodo;
}

void NodoABB::setHijoIzq(NodoABB* nodo){
	this->hijoIzq = nodo;
}

void NodoABB::incrementarFrecuencias(int doc_id, MonitorMemoria* mem){
	this->frec_t++;

//	IteradorLista<nodo_lista*> it = this->lista->iterador();
//	it.ultimo();
//	nodo_lista* nodo = it.get();
//	nodo_lista* nodo;
//	while(it.tieneSiguiente()){
//		nodo = it.siguiente();
//	}
	if (this->ultimo_nodo_lista->doc_id == doc_id){
		this->ultimo_nodo_lista->frec++;
	}else{
		reg_docs_variable* nuevo_nodo = new reg_docs_variable;
		nuevo_nodo->doc_id = doc_id;
		nuevo_nodo->frec = 1;
		this->lista->agregar(nuevo_nodo);
		this->cant_documentos++;
		this->ultimo_nodo_lista = nuevo_nodo;

		mem->incrementarNodoLista();
	}
	return;
}

string* NodoABB::getTermino(){
	return this->termino;
}

int NodoABB::getCantDocs(){
	return this->cant_documentos;
}

int NodoABB::getFrecuencia(){
	return this->frec_t;
}

IteradorLista <reg_docs_variable*> NodoABB::getIterador(){
	return this->lista->iterador();
}

Lista <reg_docs_variable*>* NodoABB::getLista(){
	return this->lista;
}

NodoABB::~NodoABB(){
	delete this->termino;

	IteradorLista<reg_docs_variable*> it = this->lista->iterador();
	while (it.tieneSiguiente()){
		delete it.siguiente();
	}

	delete this->lista;

	if (this->hijoDer != NULL){
		delete this->hijoDer;
	}

	if (this->hijoIzq != NULL){
		delete this->hijoIzq;
	}
}

